Ansibleのinventory入門
Ansibleは、定義されたインフラ設定を複数のサーバに対し、同時に適用することができます。 この時、どのサーバに対し設定を行うかを定義するのが inventory です。 例えば、hostsというファイルにinventoryを定義します。
基本的なinventory
inventoryは、一言で言えば「対象サーバの一覧」です。 inventoryファイル(歴史的にhostsというファイル名にすることが多い)は、次のようにホスト名の列挙となります。
10.0.11.121 10.0.11.122 10.0.21.100
名前解決ができてSSHアクセス可能であれば、ホスト名、IPアドレスでもホスト名のどちらでもOKです。
group
inventoryでは、次のようにホストをグループ化することができます。
[web] 10.0.11.121 10.0.11.122 [batch] 10.0.21.100
ホストをグループ化することで、次のようにplaybookを特定のホストにのみ適用することができます。
# # web.yml # - hosts: web sudo: yes remote_user: ec2-user roles: - apache2
all group
allは、暗黙的に定義されたグループです。 all groupには、inventoryファイルで定義されたすべてのホストを含むため、次のようにplaybookを全ホストに適用することができます。
# # all.yml # - hosts: all sudo: yes remote_user: ec2-user roles: - cloudwatchlogs
groupのgroup
:children
を使うことで、グループをグループ化することができます。
[bastion] 10.0.11.100 [web] 10.0.11.121 10.0.11.122 [batch] 10.0.21.100 [amazonlinux:children] bastion [ubuntu:children] web batch
group vars
ホストをグループ化することで、playbookの実行対象をまとめることができます。 この時、グループ毎に変数「group vars」を定義することができます。
group varsは、group_varsディレクトリを作成し、[group名].ymlという名前のファイルに定義します。 webグループに関する設定は、group_vars/web.yml にYAMLフォーマットで定義してください。
# # web.yml # web_domain: “www.example.com”
まとめ
Ansibleではinventoryに対象ホストを定義します。 適用したいインフラ構成が複数ある場合、playbook毎にグループ化してください。 グループ化した場合、変数はそれぞれのgroup varsに定義できます。